/**
 * \brief Este módulo vai permitir ao programador registar logs
 *
 * \description Permite que o output do programa não se limite a
 * obter o resultado, mas também gerar alguma informação extra e
 * util para o programador.
 */
# ifndef LOG_SYSTEM_DEFINITION
# define LOG_SYSTEM_DEFINITION

# include <stdlib.h>
# include <string.h>
# include <stdio.h>

typedef enum { INFO, WARNING, ERRO, CRITICAL, NONE } LogLevel;
// INFO - GERA MUITO LOG
// WARNING - GERA MENOS QUE INFO
// ERROR - GERA AINDA MENOS
// CRITICAL - ERROS DOS QUAIS NAO SE CONSEGUE RECUPERAR
// NONE - NENHUM

/**
 * \brief Inicializa o log.
 * \param maxLevel Nível de log
 */
void initLogSystem(LogLevel maxLevel);
/**
 * \brief Adiciona uma mensagem ao log
 * \param local Sequencia de pastas onde se encontra o ficheiro
 * \param file Ficheiro exacto onde se encontra a função
 * \param function Função onde está o problema
 * \param msg Mensagem para o programador
 * \param level Nivel de log associado
 */
void logMessage(char *local, char *file, char *function, char *msg, LogLevel level);

# endif
